/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	SysclockTaskProcess.java
 * 模块说明：	
 * 修改历史：
 * Nov 10, 2007 - lxm - 创建。
 */
package com.hd123.rumba.sysclock;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.mscb.order.biz.IBMscbMgr;
import com.hd123.rumba.prompt.provider.IPromptContent;
import com.hd123.rumba.prompt.provider.PromptContent;
import com.hd123.rumba.runtime.NamingMgr;
import com.hd123.rumba.runtime.OperateContext;
import com.hd123.rumba.runtime.backprocess.BackProcess;

/**
 * 系统时钟任务
 * 
 * @author lxm
 * 
 */
public class SysclockTaskProcess extends BackProcess {

  private Date notifyTime = new Date();

  @Override
  public String getCaption() {
    return "系统时钟消息订阅自动触发任务";
  }

  @Override
  public Object getPromptReceiver() {
    return this.getOperator();
  }

  @Override
  public void execute() throws Exception {
    notifyTime = ((SysclockTaskNature) this.getNature()).getNotifyTime();
    IBMscbMgr mscbMgr = (IBMscbMgr) NamingMgr.getInstance().lookupMgr(IBMscbMgr.class);

    try {
      // 调用BMscbMgr.notify
      Map<String, Object> dict = new HashMap<String, Object>();
      dict.put(CSysclock.DICT_NOTIFYTIME, notifyTime);
      IPromptContent pmptCtx = new PromptContent();
      pmptCtx.setTime(notifyTime);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日 HH:mm");
      pmptCtx.setTitle("系统时钟触发消息：(" + sdf.format(notifyTime) + ")");
      mscbMgr.notifyT(null, SysclockSubject.class.getName(), SysclockSubject.VALUE_EVENT_ONTICK,
          dict, pmptCtx, new OperateContext(this.getOperator()));

      this.getSysclockMgr().updateBufferByNotifyTimeT(notifyTime);
      
    } finally {
      this.getSysclockMgr().arrangeTask();
    }
  }

  public synchronized Date getNotifyTime() {
    return notifyTime;
  }

  public synchronized void setNotifyTime(Date notifyTime) {
    this.notifyTime = notifyTime;
  }

  private ISysclockMgr sysclockMgr = null;

  private ISysclockMgr getSysclockMgr() throws BusinessException {
    if (this.sysclockMgr == null)
      this.sysclockMgr = (ISysclockMgr) NamingMgr.getInstance().lookupMgr(ISysclockMgr.class);
    return this.sysclockMgr;
  }

}
